import json
import os
import re
from openai import OpenAI


def read_markdown_file(file_path):
    """读取Markdown文件内容"""
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return file.read()
    except Exception as e:
        print(f"读取文件时出错: {e}")
        return None


def write_markdown_file(file_path, content):
    """将内容写入Markdown文件"""
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(content)
        print(f"文件已成功更新: {file_path}")
    except Exception as e:
        print(f"写入文件时出错: {e}")


def get_image_insert_positions(article_content, images_info):
    """调用AI模型获取图片插入位置"""
    # 构建提示信息
    prompt = f"""请帮我在以下文章中插入图片。每一张图片都有对应的描述，请根据描述找到最合适的插入位置。

    注意事项：
    1. 不要修改文章原有的任何内容和格式
    2. 只需要告诉我每张图片应该插入在文章的哪个具体位置，用文章中的文字片段前后定位
    3. 图片使用Markdown格式插入: ![图片描述](图片路径)
    4. 请一次性安排所有图片的插入位置
    5. 请返回完整的修改后的文章内容，不要修改除文章内容以外的任何内容

    文章内容：
    {article_content}

    图片信息：
    {json.dumps(images_info, ensure_ascii=False, indent=2)}
    """

    # 调用AI模型
    client = OpenAI(
        base_url="https://aihubmix.com/v1",
        api_key="sk-PjfrbJ5yZ1kAeSH6875c4fD5551f4f4b8e839d28Da91A6Db"  # 请替换为实际的API密钥
    )

    try:
        completion = client.chat.completions.create(
            model="gemini-2.5-pro",
            messages=[{"role": "user", "content": prompt}]
        )

        return completion.choices[0].message.content
    except Exception as e:
        print(f"调用AI模型时出错: {e}")
        return None


def insert_images_into_article(markdown_file_path, images_info):
    """将图片插入到文章中"""
    # 读取文章内容
    article_content = read_markdown_file(markdown_file_path)
    if not article_content:
        return

    # 获取AI返回的带图片的文章内容
    updated_content = get_image_insert_positions(article_content, images_info)
    if not updated_content:
        print("无法获取更新后的文章内容")
        return False
    # 移除图片的描述（将 ![任意描述](路径) 改为 ![](路径)），支持含空格路径
    updated_content = re.sub(r'!\[[^\]]*\]\(([^)]+?)(?:\s+\"[^\"]*\")?\)', r'![](\1)', updated_content)

    # 将更新后的内容写回文件
    updated_content = re.sub(r'!\[[^\]]*\]\(([^)]+?)(?:\s+\"[^\"]*\")?\)', r'![](\1)', updated_content)
    write_markdown_file(markdown_file_path, updated_content)
    return True



if __name__ == "__main__":
    # 示例用法
    markdown_file_path = "../service/INTP.md"  # 替换为实际的Markdown文件路径

    # 图片信息列表
    images_info = [
        {
            "prompt": "A close-up shot of a stunning ...",
            "image_path": "D:\\pythonfiles\\pseo-auto-pipeline\\service\\gemini_image_output\\image_1_20250919113510_A_close-up_shot_of_a.png"
        },
        {
            "prompt": "A fashionably dressed woman we...",
            "image_path": "D:\\pythonfiles\\pseo-auto-pipeline\\service\\gemini_image_output\\image_2_20250919113524_A_fashionably_dresse.png"
        }
    ]

    # 转换Windows路径为Markdown兼容的路径格式
    for image in images_info:
        image["image_path"] = image["image_path"].replace("\\", "/")

    # 执行插入操作
    insert_images_into_article(markdown_file_path, images_info)
